package com.nicolas.pattern.flyweight;

import java.util.Hashtable;

/**
 * FlyweightFactory（享元工厂类）：享元工厂类用于创建并管理享元对象，它针对抽象享元类编程，
 * 将各种类型的具体享元对象存储在一个享元池中，享元池一般设计为一个存储“键值对”的集合（也可以是其他类型的集合），
 * 可以结合工厂模式进行设计；当用户请求一个具体享元对象时，
 * 享元工厂提供一个存储在享元池中已创建的实例或者创建一个新的实例（如果不存在的话），
 * 返回新创建的实例并将其存储在享元池中。
 * @author nicolas  2017年2月12日 -- 上午11:48:44
 */
public class IgoChessmanFactory {
	private static IgoChessmanFactory instance = new IgoChessmanFactory();  
    private static Hashtable ht; //使用Hashtable来存储享元对象，充当享元池  
      
    private IgoChessmanFactory() {  
        ht = new Hashtable();  
        IgoChessman black,white;  
        black = new BlackIgoChessman();  
        ht.put("b",black);  
        white = new WhiteIgoChessman();  
        ht.put("w",white);  
    }  
      
    //返回享元工厂类的唯一实例  
    public static IgoChessmanFactory getInstance() {  
        return instance;  
    }  
      
    //通过key来获取存储在Hashtable中的享元对象  
    public static IgoChessman getIgoChessman(String color) {  
        return (IgoChessman)ht.get(color);    
    }  
}
